package net.ojbk.service;

import net.ojbk.po.*;
import net.ojbk.util.DateTool;
import net.ojbk.util.EmailTool;
import net.ojbk.util.PasswordTool;
import net.ojbk.dao.*;

public class ModifyPasswordService {
	private UserLoginDao userLoginDao;
	private UserDataDao userDataDao;
	private ModifyPasswordDao modifyPasswordDao;
	
	public ModifyPasswordService() {
		userLoginDao = new UserLoginDao();
		userDataDao = new UserDataDao();
		modifyPasswordDao = new ModifyPasswordDao();
	}
	
	/**
	 * 
	 * 修改面么
	 * 
	 * @param code
	 * @param newPw
	 * @return 1：成功	2：无效code	3：无效Email		4：密码不符合要求
	 */
	public int userCodeModifyPassword(String code, String newPw) {
		// 判断新密码是否符合要求
		if (!PasswordTool.checkPassword(newPw)) return 4;
		
		// 判断code是否有效 {无效code, code不存在}
		if (code == null || code.equals("1")) { // 无效code
			return 2;
		}
		ModifyPassword pomp = new ModifyPassword();
		pomp.setCode(code);
		modifyPasswordDao.queryOneRecord(pomp);
		String e = pomp.getEmail();
		if (!modifyPasswordDao.checkOneRecord(code, null)) { // 假code
			return 2;
		}
		
		// 开始 查到对应的id
		UserData poud = new UserData();
		poud.setEmail(e);
		userDataDao.queryOneRecord(poud);
		String id = poud.getId();
		
		// 开始修改密码
		int ModifyPwStatus = this.directModifyPassword(id, newPw);
		switch (ModifyPwStatus) {
			case 3: return 3;
			case 4: return 4;
		}
		// case 为1 所以密码修改成功
		// 标记使 code 失效
		pomp.setCode("1");
		modifyPasswordDao.updateOneRecord(pomp);
		
		// 发送修改成功的提示邮件
		Email ePaper = new Email();
		String content = ""
				+ "您的ID：" + id
				+ "\n时间：" + DateTool.getDateTime()
				+ "\n修改密码成功"
				+ "";
		ePaper.setToEmail(e);
		ePaper.setTitle("师易信息科技有限公司 成功改密邮件");
		ePaper.setContent(content);
		EmailTool.sendEmail(ePaper);
		return 1;
	}
	
	/**
	 * 
	 * @param id
	 * @param newPw
	 * @return 1：修改成功	3：id不存在	4：密码不符合要求
	 */
	public int directModifyPassword(String id, String newPw) {
		// 判断 id 是否有效
		UserLogin poul = new UserLogin();
		poul.setId(id);
		userLoginDao.queryOneRecord(poul);
		if (!userDataDao.checkOneRecord(id)) 
			return 3; // id 不存在 查询不带 id记录
		if (!PasswordTool.checkPassword(newPw)) 
			return 4;
		
		// 开始修改 密码
		poul.setPassword(newPw);
		userLoginDao.updateOneRecord(poul);
		return 1;
	}
	
	
	public static void main(String[] args) {
		ModifyPasswordService mps = new ModifyPasswordService();
		String code = "9HNXC49AMUWQNCGZ92M227VWU8WKGZQ3L2CXV8JD5NQ";
		String newPw = "987654321";
		int status = mps.userCodeModifyPassword(code, newPw);
		System.out.println(status);
	}

}
